package com.example.secondhand.controller;

import com.example.secondhand.service.IdleItemService;
import com.example.secondhand.common.enums.ErrorMsg;
import com.example.secondhand.model.shIdleItem;
import com.example.secondhand.vo.ResultVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Date;

/**
 * 闲置物品控制器
 */
@CrossOrigin
@RestController
@RequestMapping("idle")
public class IdleItemController {

    @Autowired
    private IdleItemService idleItemService;

    /**
     * 添加闲置物品
     */
    // 通过POST方法添加闲置物品
    @PostMapping("add")
    public ResultVo addIdleItem(
            // 获取cookie中的shUserId作为参数
            @CookieValue("shUserId")
            // 标记shUserId不能为空，如果为空则返回指定消息
            @NotNull(message = "登录异常 请重新登录")
            // 标记shUserId不能为空字符串，如果为空字符串则返回指定消息
            @NotEmpty(message = "登录异常 请重新登录") String shUserId,
            // 从请求体中获取shIdleItem对象作为参数
            @RequestBody shIdleItem idleItemModel) {
        // 将shUserId设置为idleItemModel的userId属性
        idleItemModel.setUserId(Long.valueOf(shUserId));
        // 设置idleStatus属性为1
        idleItemModel.setIdleStatus((byte) 1);
        // 设置releaseTime属性为当前时间
        idleItemModel.setReleaseTime(new Date());
//        System.out.println(idleItemModel.getIdleNum());
        // 调用服务层方法添加闲置物品，如果成功则返回成功结果，否则返回系统错误消息
        if (idleItemService.addIdleItem(idleItemModel)) {
            return ResultVo.success(idleItemModel);
        }
        return ResultVo.fail(ErrorMsg.SYSTEM_ERROR);
    }


    /**
     * 获取指定id闲置物品信息
     */
    @GetMapping("info")
    public ResultVo getIdleItem(@RequestParam Long id){
        return ResultVo.success(idleItemService.getIdleItem(id));
    }

    /**
     * 获取所有闲置物品
     */
    @GetMapping("all")
    public ResultVo getAllIdleItem(@CookieValue("shUserId")
                                   @NotNull(message = "登录异常 请重新登录")
                                   @NotEmpty(message = "登录异常 请重新登录") String shUserId){
        return ResultVo.success(idleItemService.getAllIdelItem(Long.valueOf(shUserId)));
    }

    /**
     * 根据条件查找闲置物品并返回结果
     *
     * @param findValue 要查找的数值（可选参数，如果未提供则为空字符串）
     * @param page      请求的页码（可选参数，如果未提供，默认为1）
     * @param nums      每页显示的数量（可选参数，如果未提供，默认为8）
     * @return 包含查询结果的 ResultVo 对象
     */
    @GetMapping("find")
    public ResultVo findIdleItem(@RequestParam(value = "findValue", required = false) String findValue,
                                 @RequestParam(value = "page", required = false) Integer page,
                                 @RequestParam(value = "nums", required = false) Integer nums) {
        // 如果未提供查找数值，则将其设置为空字符串
        if (null == findValue) {
            findValue = "";
        }

        // 设置默认的页码和每页显示数量
        int p = 1;
        int n = 8;
        // 如果提供了页码参数，则使用提供的值（且必须大于0），否则使用默认值1
        if (null != page) {
            p = page > 0 ? page : 1;
        }
        // 如果提供了每页显示数量参数，则使用提供的值（且必须大于0），否则使用默认值8
        if (null != nums) {
            n = nums > 0 ? nums : 8;
        }

        // 调用闲置物品服务的方法进行查询，并将结果封装到 ResultVo 中返回
        return ResultVo.success(idleItemService.findIdleItem(findValue, p, n));
    }

    /**
     * 根据标签查找闲置物品
     */
    @GetMapping("lable")
    public ResultVo findIdleItemByLable(@RequestParam(value = "idleLabel",required = true) Integer idleLabel,
                                        @RequestParam(value = "page",required = false) Integer page,
                                        @RequestParam(value = "nums",required = false) Integer nums){
        int p=1;
        int n=8;
        if(null!=page){
            p=page>0?page:1;
        }
        if(null!=nums){
            n=nums>0?nums:8;
        }
        return ResultVo.success(idleItemService.findIdleItemByLable(idleLabel,p,n));
    }

    /**
     * 更新闲置物品信息
     */
    @PostMapping("update")
    public ResultVo updateIdleItem(@CookieValue("shUserId")
                                   @NotNull(message = "登录异常 请重新登录")
                                   @NotEmpty(message = "登录异常 请重新登录") String shUserId,
                                   @RequestBody shIdleItem idleItemModel){
        idleItemModel.setUserId(Long.valueOf(shUserId));
        if(idleItemService.updateIdleItem(idleItemModel)){
            return ResultVo.success();
        }
        return ResultVo.fail(ErrorMsg.SYSTEM_ERROR);
    }
}
